import re
from typing import Tuple
from app.core.config import settings
from app.services.data_generator import DataGenerator

class PromptAnalyzer:
    def __init__(self):
        self.data_generator = DataGenerator()
        # 添加新的数据类型关键词
        self.type_keywords = {
            'person': ['人', '个人', '用户', '客户', '员工'],
            'company': ['公司', '企业', '单位', '机构', '组织'],
            'article': ['文章', '博客', '新闻', '帖子', '内容'],
            'product': ['产品', '商品', '货物', '物品'],
            'order': ['订单', '交易', '购买', '下单'],
            'review': ['评论', '评价', '反馈', '点评'],
            'bank_account': ['银行', '账户', '账号', '存款'],
            'education': ['教育', '学生', '学校', '学历', '成绩'],
            'social_media': ['社交', '媒体', '账号', '粉丝'],
            'phone': ['手机号', '电话号码', '手机', '电话'],
            'uuid': ['uuid', 'UUID', 'id', 'ID'],
            'timestamp': ['时间戳', '时间', '日期']
        }
        
    def analyze_prompt(self, prompt: str) -> Tuple[str, int]:
        """
        分析用户输入的prompt，返回推测的数据类型和数量
        """
        # 检查是否在询问支持的数据类型
        query_keywords = ['支持', '类型', '可以', '能够', '数据', '哪些', '什么']
        if all(keyword in prompt for keyword in ['支持', '类型']) or \
           all(keyword in prompt for keyword in ['可以', '生成']) or \
           all(keyword in prompt for keyword in ['能够', '生成']) or \
           all(keyword in prompt for keyword in ['数据', '类型']) or \
           all(keyword in prompt for keyword in ['哪些', '数据']) or \
           all(keyword in prompt for keyword in ['什么', '数据']):
            return 'show_types', 0

        # 提取数量
        count = settings.DEFAULT_DATA_COUNT
        number_match = re.search(r'\d+', prompt)
        if number_match:
            count = int(number_match.group())
            count = min(max(count, 1), settings.MAX_DATA_COUNT)
        
        # 计算每个类型的匹配分数
        type_scores = {}
        for data_type, keywords in self.type_keywords.items():
            score = sum(1 for keyword in keywords if keyword in prompt)
            type_scores[data_type] = score
        
        # 获取得分最高的类型
        if not any(type_scores.values()):
            raise ValueError('无法识别数据类型，请提供更具体的描述')
        
        best_type = max(type_scores.items(), key=lambda x: x[1])[0]
        return best_type, count
